﻿#ifndef HGL_MULTI_THREAD_CONDITION_VARIABLE_INCLUDE
#define HGL_MULTI_THREAD_CONDITION_VARIABLE_INCLUDE

#include<hgl/platform/Platform.h>
namespace hgl
{
	class ThreadMutex;
	class RWLock;

	/**
	* 条件变量
	*/
	class CondVar
	{
		void *cond_var;

	public:

		CondVar();
		virtual ~CondVar();

		bool Wait(ThreadMutex *,double time=0);														///<释放指定ThreadMutex，在条件符合后重新锁定并结束等待,0表示永久

#if HGL_OS == HGL_OS_Windows
		bool Wait(RWLock *,double time=0,bool read=false);											///<释放指定RWLock，在条件符合后重新锁定并结束等待。（注：此函数仅在Windows 2008/Vista及更新版本中支持，Linux/BSD版不支持）
#endif//HGL_OS == HGL_OS_Windows

		void Signal();																				///<发送一个信号,让一个等待的线程解锁
		void Broadcast();																			///<广播一个信号,让所有等待的线程都解锁
	};//class CondVar
}//namespace hgl
#endif//HGL_MULTI_THREAD_CONDITION_VARIABLE_INCLUDE
